<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="fzuet" id="fzuet"><span data-lake-id="ud794a542" id="ud794a542">典型回答</span></h1>
  <p data-lake-id="uef0fc64b" id="uef0fc64b"><br></p>
  <p data-lake-id="u9cfb0e80" id="u9cfb0e80"><span data-lake-id="ubea52ad3" id="ubea52ad3">Service Mesh是一个比较新的概念，用于解决微服务架构中的一些问题，如服务发现、服务间通信、负载均衡、安全、监控等。</span></p>
  <p data-lake-id="u3d25d0e6" id="u3d25d0e6"><span data-lake-id="u7f799fe9" id="u7f799fe9">​</span><br></p>
  <p data-lake-id="uc80d03fa" id="uc80d03fa"><strong><span data-lake-id="ud6b30cb1" id="ud6b30cb1">它是一种新型的架构模式，主要思想是将服务之间的通信从服务代码中抽象出来，并在整个应用中提供一种统一的方式进行管理和控制。</span></strong></p>
  <p data-lake-id="ucb267e5b" id="ucb267e5b"><span data-lake-id="u10b9ca28" id="u10b9ca28">​</span><br></p>
  <p data-lake-id="u738f083f" id="u738f083f"><span data-lake-id="u8caf1590" id="u8caf1590">Service Mesh代理通常是以sidecar的方式部署在每个服务实例旁边，它们可以拦截和处理来自服务实例的所有网络流量，并提供各种功能，例如负载均衡、故障转移、熔断、限流、安全、监控等。Service Mesh代理可以提供更细粒度的控制和管理，例如在请求级别进行路由和重试，并且可以实时监控和调整服务的行为。</span></p>
  <p data-lake-id="u61f4b246" id="u61f4b246"><span data-lake-id="u8d96d108" id="u8d96d108">​</span><br></p>
  <p data-lake-id="u59fac30d" id="u59fac30d"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1679215360555-87382def-c169-40e4-8131-5cde4156a49c.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_30%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u320bafc8" id="u320bafc8"><span data-lake-id="u6fa5794a" id="u6fa5794a">​</span><br></p>
  <p data-lake-id="u7f1967d4" id="u7f1967d4"><span data-lake-id="u75ac5587" id="u75ac5587">目前比较流行的Service Mesh产品包括Istio、Linkerd、Envoy等。</span></p>
  <p data-lake-id="ue7dde419" id="ue7dde419"><strong><span data-lake-id="u440885d1" id="u440885d1">​</span></strong><br></p>
  <p data-lake-id="ua4277fda" id="ua4277fda"><strong><span data-lake-id="ueb63af7a" id="ueb63af7a">Service Mesh一般在异构系统中用的比较多，比如一家公司的技术栈比较杂，既有Java、又有C++，还有Python，PHP等 ，通过Service Mesh可以很好的用同一套架构体系将异构语言的程序员整合到一起。</span></strong></p>
  <p data-lake-id="u852931a5" id="u852931a5"><span data-lake-id="u3f11d3d1" id="u3f11d3d1">​</span><br></p>
  <p data-lake-id="ue385cb14" id="ue385cb14"><span data-lake-id="u26f93bb2" id="u26f93bb2">​</span><br></p>
  <p data-lake-id="u72139eda" id="u72139eda"><span data-lake-id="u9063e6fa" id="u9063e6fa">除了前面说的这些，ServiceMesh在实际应用中，还会用来实现以下以下一些功能：<br>
    1.rpc转http，http转rpc，用于调用者不支持rpc的情况</span></p>
  <p data-lake-id="u82e6c525" id="u82e6c525"><span data-lake-id="uabcafcec" id="uabcafcec"><br>
    2.真实流量压测，将多机的流量转发到一台机器上</span></p>
  <p data-lake-id="u7f718a7f" id="u7f718a7f"><span data-lake-id="u7f3350d1" id="u7f3350d1"><br>
    3.精准的流量分析，如vip日志，针对某个用户维度的全链路流量跟踪</span></p>
  <p data-lake-id="u566ca416" id="u566ca416"><span data-lake-id="ud2c04e8d" id="ud2c04e8d"><br>
    4.服务健康状态巡检，分析服务的异常，qps，使用率等信息生成报告，并对比历史数据给出异常告警</span></p>
  <p data-lake-id="u0f2f7ef8" id="u0f2f7ef8"><span data-lake-id="ud9a56652" id="ud9a56652"><br>
    5.提供数据通路，服务自身可以通过这个通路上报各种非业务性质的内部状态</span></p>
  <p data-lake-id="ua423ce5e" id="ua423ce5e"><span data-lake-id="u3bbd83f1" id="u3bbd83f1"><br>
    6.流量拷贝和镜像，把流量拷贝到测试环境，再通过data mesh提供cow与线上数据环境打通，同时不影响线上业务数据。这样排查问题非常方便</span></p>
  <p data-lake-id="u102dbcd5" id="u102dbcd5"><span data-lake-id="uebd6cf6c" id="uebd6cf6c"><br>
    7.加速服务通信性能，mesh agnet位于服务机器内，通过lo与服务通信代理流量作为统一流量入口。lo不会过内核协议栈，大幅度降低cpu压力和耗时。而mesh agent自身收发网络流量也可以使用ebpf或者dpdk这样kernel-bypass技术绕过协议栈协议解析，降低cpu压力和耗时。整体通信成本大幅度降低，使用mesh前耗时10-20ms可降低到几ms。<br><br></span></p>
  <p data-lake-id="u06900e61" id="u06900e61"><span data-lake-id="u95266bc5" id="u95266bc5"><br><br></span></p>
 </body>
</html>